package com.wtb.javatool.dao;

import com.wtb.javatool.dto.TeamDto;
import com.wtb.javatool.dto.UserDto;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

@Mapper
public interface ProjectUserMapper {

    /**
     * 添加项目负责人
     *
     * @param projectId 要添加的项目id
     * @param userIds   一个包含用户ID的列表，这些用户ID将被添加为项目负责人
     * @return 添加的条数
     */
    int addProjectLeaders(@Param("projectId") Long projectId,
                          @Param("list") List<Long> userIds);


    /**
     * 根据项目ID、用户名称（可选）查询普通项目的用户成员。
     *
     * @param projectId 项目ID，用于检索该项目。
     * @param userName  用户名称，用于筛选查询结果（可为null或空字符串表示不筛选）。
     * @return 返回满足条件的对象列表。
     */
    List<UserDto> findNormalProjectMemberByProjectId(@Param("projectId") Long projectId, @Param("userName") String userName);


    /**
     * 根据项目ID、用户名称（可选）查询课程项目的项目小组和小组成员。
     *
     * @param projectId 项目ID，用于检索该项目。
     * @return 返回满足条件的对象列表。
     */
    List<TeamDto> findProjectTeamsAndMembersByProjectId(@Param("projectId") Long projectId, @Param("courseId") Long courseId);

    /**
     * 根据小组ID查询小组成员（学生）。
     *
     * @param teamId 小组ID
     * @return 返回小组成员列表
     */
    List<UserDto> findStudentsByTeamId(@Param("teamId") Long teamId);

    /**
     * 更新某个项目中的成员身份或状态。
     *
     * @param projectId 项目ID，用于指向唯一项目。
     * @param user      成员。
     */
    void updateUser(@Param("projectId") Long projectId, @Param("user") UserDto user); // 更新用户

    /**
     * 向某个项目中插入新的成员。
     *
     * @param projectId 项目ID，用于指向唯一项目。
     * @param user      成员。
     */
    void insertUser(@Param("projectId") Long projectId, @Param("user") UserDto user); // 插入用户

    /**
     * 向某个项目中删除某个成员。
     *
     * @param projectId 项目ID，用于指向唯一项目。
     * @param userId    成员ID。
     */
    void deleteUserById(@Param("projectId") Long projectId, @Param("userId") Long userId);

    int batchInsertProjectManager(@Param("projectId") Long projectId, @Param("list") List<Long> userIds);
}
